package com.ljx.designMode.factor;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/8 16:05
 * @Version 1.0
 * **优点**：由于Adapter继承了Adaptee类，
 * 所以它可以根据需求重写Adaptee类的方法，使得Adapter的灵活性增强了。
 *
 * **缺点**：因为java单继承的缘故，Target类==必须是接口==，
 * 以便于Adapter去继承Adaptee并实现Target，
 * 完成适配的功能，但这样就导致了Adapter里暴露了Adaptee类的方法，
 * 使用起来的成本就增加了。
 * Adapter target = new Adapter();
 * System.out.println(target.outPut()/target.input220V);
 *
 */
public class AdapterMode {
	public static void main(String[] args) {
		Target target = new Adapter();
		System.out.println(target.outPut());
	}
}

/**
 * Adaptee受改造者（想要将其改造成适合我们的交流电）
 * 它是需要被访问的、需要被适配的组件
 */
class AdapteeAC220{
	public int input220V(){
		int input=220;
		return input;
	}
}

/**
 * 类适配器
 * 适配器是本模式的核心，适配器把原接口转换成目标接口
 * 显然，这一角色不可以是接口，只能是具体的类
 * 通过继承和实现目标接口，让客户端按照目标接口的方法访问适配者
 */
class Adapter extends AdapteeAC220 implements Target{

	@Override
	public int outPut() {
		return input220V()/44;
	}
}

/**
 * 目标角色：这就是我们想要得到的接口
 * 注意：由于这里讨论的是类适配器模式，因此目标不可以是类。
 * 当前系统业务所使用的接口，可以是抽象类或接口.
 */
interface Target{
	int outPut();
}